/* 


1. async-await异步函数作用 ： 相当于promise高级写法
    1.1 promise作用： 解决回调地狱
        回调地狱： 异步回调，层层嵌套
    1.2 promise语法
        第一步：声明promise对象  
            let p = new Promise((resolve,reject)=>{ //异步操作 })
        第二步：调用promise对象的then方法
            p.then(data=>{}).catch(err=>{})
    1.3 promise解决回调地狱方式： 在上一个promise对象的then方法中返回下一个promise对象


2. async-await语法
    2.1 函数使用async修饰 ： async function(){}
    2.2 在函数中使用await来调用promise :  let data = await promise对象
        * data就是promise的then中的结果
        * 优点：没有promise的then回调，代码看起来与同步代码几乎一致


3. async-await的异常只能用try-catch来捕捉


*/

const fs = require('fs')

function getPromise (filename){
    return new Promise((resolve,reject)=>{
        fs.readFile(`${__dirname}/data/${filename}.txt`,'utf-8',(err,data)=>{
            if (err) {
                // 调用catch:异步失败
                reject(err)
            }else{
                //调用then:异步成功
                resolve(data)
            }
        })
    })
}

async function fn(){
    try{

        let data1 = await getPromise('a')
        console.log(data1);

        let data2 = await getPromise('b')
        console.log(data2);

        let data3 = await getPromise('c')
        console.log(data3);

        let data4 = await getPromise('d')
        console.log(data4);

    }catch(err){
        console.log(err);
    }
}
fn()